home *** CD-ROM | disk | FTP | other *** search
Text File | 1989-07-20 | 28.3 KB | 1,129 lines |
- Path: uunet!wyse!vsi1!apple!sun-barr!rutgers!aramis.rutgers.edu!dartagnan.rutgers.edu!mcgrew
- From: mcgrew@dartagnan.rutgers.edu (Charles Mcgrew)
- Newsgroups: comp.sources.sun
- Subject: v01i050: DGtool - Data General terminal emulator
- Message-ID: <Jul.20.17.07.57.1989.17170@dartagnan.rutgers.edu>
- Date: 20 Jul 89 21:08:00 GMT
- Organization: Rutgers Univ., New Brunswick, N.J.
- Lines: 1118
- Approved: mcgrew@aramis.rutgers.edu
-
- Submitted-by: ksp@maxwell.nde.swri.edu
- Posting-number: Volume 1, Issue 50
- Archive-name: dgtool
-
- #!/bin/sh
- # This is a shell archive, meaning:
- # 1. Remove everything above the #!/bin/sh line.
- # 2. Save the resulting text in a file.
- # 3. Execute the file with /bin/sh (not csh) to create the files:
- # README
- # COPYRIGHT
- # Makefile
- # dg.1
- # dg.c
- # dgtool.1
- # dgtool.c
- # dgtool.icon
- # This archive created: Fri Jun 30 08:54:06 1989
- export PATH; PATH=/bin:$PATH
- echo shar: extracting "'README'" '(560 characters)'
- if test -f 'README'
- then
- echo shar: over-writing existing file "'README'"
- fi
- sed 's/^X//' << \SHAR_EOF > 'README'
- X
- XThis is a very simple dg terminal emulator. At this time
- X(30 June 1989) it provides a d460 type of function key
- Xsupport and a d6053 type of screen emulation.
- X
- XChanges and enhancements to the code are encouraged.
- X
- XPlease mail a copy of fixes or enhancements to:
- X
- Xksp@maxwell.nde.swri.edu
- X
- XNotes:
- X You will need to change the path at the top of
- X dgtool.c to the path you will use for `dg'.
- X
- X
- X Good luck,
- X
- X -keith
- X
- XKeith S. Pickens Southwest Research Institute
- Xksp@maxwell.nde.swri.edu
- X{sun!texsun, gatech!petro, cs.utexas.edu}!swrinde!maxwell!ksp
- SHAR_EOF
- if test 560 -ne "`wc -c 'README'`"
- then
- echo shar: error transmitting "'README'" '(should have been 560 characters)'
- fi
- echo shar: extracting "'COPYRIGHT'" '(766 characters)'
- if test -f 'COPYRIGHT'
- then
- echo shar: over-writing existing file "'COPYRIGHT'"
- fi
- sed 's/^X//' << \SHAR_EOF > 'COPYRIGHT'
- X
- XCopyright (c) 1989 Southwest Research Institute
- XAll rights reserved.
- X
- XRedistribution and use in source and binary forms are permitted
- Xprovided that the above copyright notice and this paragraph are
- Xduplicated in all such forms and that any documentation,
- Xadvertising materials, and other materials related to such
- Xdistribution and use acknowledge that the software was developed
- Xby Southwest Research Institute. The name of Southwest Research
- XInstitute may not be used to endorse or promote products derived
- Xfrom this software without specific prior written permission.
- XTHIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- XIMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- XWARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- SHAR_EOF
- if test 766 -ne "`wc -c 'COPYRIGHT'`"
- then
- echo shar: error transmitting "'COPYRIGHT'" '(should have been 766 characters)'
- fi
- echo shar: extracting "'Makefile'" '(187 characters)'
- if test -f 'Makefile'
- then
- echo shar: over-writing existing file "'Makefile'"
- fi
- sed 's/^X//' << \SHAR_EOF > 'Makefile'
- XCFLAGS= -O
- XLDFLAGS=
- X
- Xall: dg dgtool
- X
- Xdg: dg.o
- X cc ${LDFLAGS} -o dg dg.o
- X
- Xdgtool: dgtool.o
- X cc ${LDFLAGS} -o dgtool dgtool.o -lsuntool -lsunwindow -lpixrect
- X
- Xclean:
- X rm -f *.o dg dgtool
- SHAR_EOF
- if test 187 -ne "`wc -c 'Makefile'`"
- then
- echo shar: error transmitting "'Makefile'" '(should have been 187 characters)'
- fi
- echo shar: extracting "'dg.1'" '(1461 characters)'
- if test -f 'dg.1'
- then
- echo shar: over-writing existing file "'dg.1'"
- fi
- sed 's/^X//' << \SHAR_EOF > 'dg.1'
- X.\" Copyright (c) 1989 Southwest Research Institute
- X.\" All rights reserved.
- X.\"
- X.\" Redistribution and use in source and binary forms are permitted
- X.\" provided that the above copyright notice and this paragraph are
- X.\" duplicated in all such forms and that any documentation,
- X.\" advertising materials, and other materials related to such
- X.\" distribution and use acknowledge that the software was developed
- X.\" by Southwest Research Institute. The name of Southwest Research
- X.\" Institute may not be used to endorse or promote products derived
- X.\" from this software without specific prior written permission.
- X.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- X.\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- X.\" WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- X.\"
- X.TH DG 1L "30 June 1989"
- X.SH NAME
- Xdg\- provide a Data General terminal emulation
- X.SH SYNOPSIS
- X.B dg
- X.I serial line
- X[
- X.I baud rate
- X]
- X.SH DESCRIPTION
- X.I dg
- Xprovides a serial line
- Xinterface for a Data General system.
- X.I dg
- Xonly provides cursor motion emulation for the common DG 6053
- Xcommands.
- XIt is not complete.
- X.SH OPTIONS
- X.LP
- XThe first argument of
- X.I dg
- Xspecifies which serial line to use when accessing the DG.
- XThe second argument is optional and specifies the baud rate to
- Xbe used in communicating with the DG.
- XIf no baud rate is given 9600 is used.
- X.SH "SEE ALSO"
- Xdgtool(1L)
- X.SH AUTHOR
- XKeith S. Pickens, Southwest Research Institute
- SHAR_EOF
- if test 1461 -ne "`wc -c 'dg.1'`"
- then
- echo shar: error transmitting "'dg.1'" '(should have been 1461 characters)'
- fi
- echo shar: extracting "'dg.c'" '(7795 characters)'
- if test -f 'dg.c'
- then
- echo shar: over-writing existing file "'dg.c'"
- fi
- sed 's/^X//' << \SHAR_EOF > 'dg.c'
- X/*
- X * Copyright (c) 1989 Southwest Research Institute
- X * All rights reserved.
- X *
- X * Redistribution and use in source and binary forms are permitted
- X * provided that the above copyright notice and this paragraph are
- X * duplicated in all such forms and that any documentation,
- X * advertising materials, and other materials related to such
- X * distribution and use acknowledge that the software was developed
- X * by Southwest Research Institute. The name of Southwest Research
- X * Institute may not be used to endorse or promote products derived
- X * from this software without specific prior written permission.
- X * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- X * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- X * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- X */
- X
- X#ifndef lint
- Xstatic char sccsid[] = "@(#)dg.c 1.5 6/29/89 Copyright (c) 1989\
- X by Southwest Research Institute, San Antonio, Texas";
- X#endif
- X
- X#include <stdio.h>
- X#include <signal.h>
- X#include <sgtty.h>
- X#include <sys/wait.h>
- X#include <sys/types.h>
- X#include <sys/socket.h>
- X#include <netdb.h>
- X
- X#define queue_char( c ) *end_of_queue++ = c
- X#define flush_the_queue() {\
- Xwrite(1, write_queue, end_of_queue - write_queue);\
- Xend_of_queue = write_queue;\
- X}
- X
- Xchar buf1[256];
- Xchar buf0[256];
- X
- Xchar write_queue[2048];
- Xchar motion_buf[16];
- Xchar *end_of_queue;
- X
- Xint master, slave, child, pid;
- Xchar linec, linen;
- X
- Xstruct baud_tab {
- X char *baud_string;
- X int baud_rate;
- X} baud_tab[] = {
- X "50", B50,
- X "75", B75,
- X "110", B110,
- X "134", B134,
- X "150", B150,
- X "200", B200,
- X "300", B300,
- X "600", B600,
- X "1200", B1200,
- X "1800", B1800,
- X "2400", B2400,
- X "4800", B4800,
- X "9600", B9600,
- X "19200", EXTA,
- X NULL, 0
- X};
- X
- Xstruct sgttyb tmode;
- Xint savemode;
- Xint fd, tflag;
- Xchar *host;
- X
- Xdone()
- X{
- X union wait status;
- X
- X if (wait3(&status, WNOHANG, 0) == 0)
- X return;
- X
- X ioctl (0, TIOCNXCL, &tmode);
- X tmode.sg_flags = savemode;
- X ioctl (0, TIOCSETP, &tmode);
- X kill(pid, SIGTERM);
- X kill(0, SIGTERM);
- X exit(0);
- X
- X}
- X
- X
- Xmain( argc, argv)
- Xint argc;
- Xchar **argv;
- X{
- X int baud = B9600;
- X int is_host = 0;
- X
- X end_of_queue = write_queue;
- X
- X if ((argc > 3) || (argc < 2) ) {
- X fprintf(stderr, "dg /dev/tty?|hostname [buad]\n");
- X fprintf(stderr, "type ^~ to exit\n");
- X exit(1);
- X }
- X
- X host = argv[1];
- X if (gethostbyname(host) != NULL)
- X is_host = 1;
- X
- X if (is_host) {
- X setup_master();
- X signal(SIGCHLD, done);
- X fd = master;
- X } else {
- X fd = open(*(++argv), 2);
- X argc--;
- X
- X if (argc > 1) {
- X baud = find_baud(*(++argv));
- X }
- X
- X if (fd < 0) {
- X fprintf(stderr, "dg: can't open the line to the DG or find a host\n");
- X exit(1);
- X }
- X }
- X ioctl (fd,TIOCGETP, &tmode);
- X tmode.sg_flags = RAW + TANDEM;
- X tmode.sg_ispeed = baud;
- X tmode.sg_ospeed = baud;
- X ioctl (fd,TIOCSETP, &tmode);
- X ioctl (fd,TIOCEXCL, &tmode);
- X
- X ioctl (0,TIOCGETP, &tmode);
- X savemode = tmode.sg_flags;
- X tmode.sg_flags = RAW;
- X ioctl (0,TIOCSETP, &tmode);
- X
- X pid = fork();
- X if (pid) {
- X write(fd, buf1, strlen(buf1));
- X writer();
- X } else {
- X if (is_host) {
- X if (fork()) {
- X reader();
- X } else {
- X start_telnet();
- X }
- X } else {
- X reader();
- X }
- X }
- X}
- X
- Xqueue_string(string)
- Xchar *string;
- X{
- X register char *cp;
- X
- X cp = string;
- X while (*cp)
- X *end_of_queue++ = *cp++;
- X}
- X
- Xfind_baud(string)
- Xchar *string;
- X{
- X struct baud_tab *btp;
- X
- X btp = baud_tab;
- X
- X while(btp->baud_string != NULL) {
- X if (strcmp (string, btp->baud_string) == 0)
- X return(btp->baud_rate);
- X btp++;
- X }
- X fprintf(stderr, "dg: unknown baud rate\n");
- X fprintf(stderr, "known baud rates are:\n");
- X
- X btp = baud_tab;
- X while(btp->baud_string != NULL) {
- X fprintf(stderr, "\t%s\n", btp->baud_string);
- X btp++;
- X }
- X exit(1);
- X}
- X
- Xstart_telnet()
- X{
- X int t;
- X char *term, *getenv(), *telnet, *tail, *rindex();
- X
- X telnet = "/usr/ucb/telnet";
- X tail = "telnet";
- X
- X if ((t = open("/dev/tty", 2)) >= 0) {
- X ioctl(t, TIOCNOTTY, (char *)0);
- X close(t);
- X }
- X setup_slave();
- X close(master);
- X dup2(slave, 0);
- X dup2(slave, 1);
- X dup2(slave, 2);
- X close(slave);
- X execl(telnet, tail, host, (char *)0);
- X perror(telnet);
- X fail();
- X}
- X
- Xfail()
- X{
- X kill(0, SIGTERM);
- X exit(0);
- X}
- X
- Xsetup_master()
- X{
- X char line[11];
- X
- X for (linec = 'p'; linec <= 's'; linec++) {
- X sprintf(line, "/dev/pty%c0", linec);
- X if (access(line, 0) != 0)
- X break;
- X for (linen = 0; linen < 16; linen++) {
- X sprintf(line, "/dev/pty%c%1x", linec, linen);
- X master = open(line, 2);
- X if (master >= 0) {
- X return;
- X }
- X }
- X }
- X fprintf(stderr, "Can't find a pty\n");
- X fail();
- X}
- X
- Xsetup_slave()
- X{
- X char line[11];
- X
- X sprintf(line, "/dev/tty%c%1x", linec, linen);
- X slave = open(line, 2);
- X if (slave < 0) {
- X perror(line);
- X fail();
- X }
- X}
- X
- Xreader()
- X{
- X register int count;
- X register int index;
- X register int row, col;
- X register char *cp, *end, c;
- X
- X for(;;) {
- X count = read(fd, buf0, 256);
- X end = buf0 + count;
- X for (cp = buf0; cp < end; cp++) {
- X c = *cp & 0177;
- X switch(c) {
- X case '\000':
- X break;
- X case '\003':
- X break;
- X case '\005': /* read cursor position - this is a real hack */
- X queue_string("\033[1;1H");
- X write(fd, "\037\000\000", 3);
- X break;
- X case '\031': /* bc=^y */
- X queue_string("\010");
- X break;
- X case '\020': /* cm=4^p%r%.%. */
- X cp++;
- X if (cp >= end) {
- X count = read(fd, buf0, 1);
- X end = buf0 + count;
- X cp = buf0;
- X }
- X col = *cp & 0177;
- X cp++;
- X if (cp >= end) {
- X count = read(fd, buf0, 1);
- X end = buf0 + count;
- X cp = buf0;
- X }
- X row = *cp & 0177;
- X col++;
- X row++;
- X sprintf(motion_buf, "\033[%d;%dH", row, col);
- X queue_string(motion_buf);
- X break;
- X case '\036': /* extended commands */
- X cp++;
- X if (cp >= end) {
- X count = read(fd, buf0, 1);
- X end = buf0 + count;
- X cp = buf0;
- X }
- X switch(*cp) {
- X case '\105': /* reverse video off */
- X queue_string("\033[m");
- X break;
- X case '\104': /* reverse video on */
- X queue_string("\033[7m");
- X break;
- X default:
- X break;
- X }
- X break;
- X case '\027': /* up=^w */
- X queue_string("\033[A");
- X break;
- X case '\013': /* ce=^k */
- X queue_string("\033[K");
- X break;
- X case '\024': /* us=^t */
- X /* start underscore */
- X queue_string("\033[4m");
- X break;
- X case '\025': /* ue=^u */
- X /* end undersore */
- X queue_string("\033[m");
- X break;
- X case '\034': /* so=^\ */
- X queue_string("\033[m");
- X break;
- X case '\035': /* se=^] */
- X queue_string("\033[1m");
- X break;
- X case '\030': /* kr=^x */
- X queue_string("\033[C");
- X break;
- X case '\032': /* kd=^z */
- X queue_string("\033[B");
- X break;
- X case '\010': /* kh=^h */
- X queue_string("\033[1;1H");
- X break;
- X case '\022': /* is=^r */
- X break;
- X case '\012': /* nl */
- X queue_string("\n\r");
- X break;
- X default:
- X queue_char((int)c);
- X }
- X }
- X flush_the_queue();
- X }
- X
- X}
- X
- Xwriter()
- X{
- X register int count;
- X register int index;
- X register int row, col;
- X register char *cp, *end, c;
- X
- X for(;;) {
- X count = read(0, buf1, 256);
- X index = 0;
- X while (index < count) {
- X if (tflag && (buf1[index] == '~') ) {
- X kill(pid, SIGTERM);
- X ioctl (0, TIOCNXCL, &tmode);
- X tmode.sg_flags = savemode;
- X ioctl (0, TIOCSETP, &tmode);
- X exit(0);;
- X } else {
- X tflag = 0;
- X }
- X if (buf1[index] == '^')
- X tflag = 1;
- X ++index;
- X }
- X write(fd, buf1, count);
- X }
- X}
- X
- X
- SHAR_EOF
- if test 7795 -ne "`wc -c 'dg.c'`"
- then
- echo shar: error transmitting "'dg.c'" '(should have been 7795 characters)'
- fi
- echo shar: extracting "'dgtool.1'" '(1773 characters)'
- if test -f 'dgtool.1'
- then
- echo shar: over-writing existing file "'dgtool.1'"
- fi
- sed 's/^X//' << \SHAR_EOF > 'dgtool.1'
- X.\" Copyright (c) 1989 Southwest Research Institute
- X.\" All rights reserved.
- X.\"
- X.\" Redistribution and use in source and binary forms are permitted
- X.\" provided that the above copyright notice and this paragraph are
- X.\" duplicated in all such forms and that any documentation,
- X.\" advertising materials, and other materials related to such
- X.\" distribution and use acknowledge that the software was developed
- X.\" by Southwest Research Institute. The name of Southwest Research
- X.\" Institute may not be used to endorse or promote products derived
- X.\" from this software without specific prior written permission.
- X.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- X.\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- X.\" WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- X.\"
- X.TH DGTOOL 1L "30 June 1989"
- X.SH NAME
- Xdgtool \- provide a Data General terminal emulation in a window
- X.SH SYNOPSIS
- X.B dgtool
- X.I serial line
- X[
- X.I baud rate
- X]
- X[
- X.I window options
- X]
- X.SH DESCRIPTION
- X.I dgtool
- Xprovides a window with a terminal emulation and a serial line or telnet
- Xinterface for a Data General system.
- XThe DG function keys F1\-F15 are replaced by F1\-F9 and R1\-R6
- Xon the Sun-3 keyboard.
- XHome is generated by the R11 key and R7, R9, R13, R15 are the
- X``C'' function keys.
- XThe cursor motion emulation and serial line access is handled
- Xby
- X.IR dg (1L).
- X.SH OPTIONS
- X.LP
- XThe first argument of
- X.I dgtool
- Xspecifies which serial line or host to use when accessing the DG.
- XThe second argument is optional and specifies the baud rate to
- Xbe used in communicating with the DG.
- X.I dgtool
- Xwill also accept the standard window arguments, see
- X.IR suntools (1).
- X.SH "SEE ALSO"
- Xsuntools(1), dg(1L)
- X.SH AUTHOR
- XKeith S. Pickens, Southwest Research Institute
- SHAR_EOF
- if test 1773 -ne "`wc -c 'dgtool.1'`"
- then
- echo shar: error transmitting "'dgtool.1'" '(should have been 1773 characters)'
- fi
- echo shar: extracting "'dgtool.c'" '(9201 characters)'
- if test -f 'dgtool.c'
- then
- echo shar: over-writing existing file "'dgtool.c'"
- fi
- sed 's/^X//' << \SHAR_EOF > 'dgtool.c'
- X/*
- X * Copyright (c) 1989 Southwest Research Institute
- X * All rights reserved.
- X *
- X * Redistribution and use in source and binary forms are permitted
- X * provided that the above copyright notice and this paragraph are
- X * duplicated in all such forms and that any documentation,
- X * advertising materials, and other materials related to such
- X * distribution and use acknowledge that the software was developed
- X * by Southwest Research Institute. The name of Southwest Research
- X * Institute may not be used to endorse or promote products derived
- X * from this software without specific prior written permission.
- X * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- X * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- X * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- X */
- X
- X#ifndef lint
- Xstatic char sccsid[] = "@(#)dgtool.c 1.9 6/29/89 Copyright (c) 1989\
- X by Southwest Research Institute, San Antonio, Texas";
- X#endif
- X
- X/*
- X * path name for `dg' - this is system dependent
- X */
- X
- X
- X#define DG "/usr/local/bin/dg"
- X
- X#include <stdio.h>
- X#include <strings.h>
- X#include <suntool/sunview.h>
- X#include <suntool/panel.h>
- X#include <suntool/canvas.h>
- X#include <sunwindow/win_cursor.h>
- X#include <suntool/tty.h>
- X#include <sundev/kbio.h>
- X#include <sundev/kbd.h>
- X#include <sgtty.h>
- X#include <sys/types.h>
- X#include <sys/socket.h>
- X#include <netdb.h>
- X
- X#define NUM_KEYS_TO_SAVE 8
- X
- XFrame base_frame;
- XTty tty_win;
- Xstatic void input_proc();
- Xstatic Notify_value my_tty_interposer();
- Xstatic Notify_value my_destroy_interposer();
- Xstatic int kb_fd;
- X
- Xstatic struct kiockey save_keys[NUM_KEYS_TO_SAVE] = {
- X {0, 0x45, 0, ""}, /* up arrow */
- X {0, 0x5d, 0, ""}, /* right arrow */
- X {0, 0x5b, 0, ""}, /*left arrow */
- X {0, 0x71, 0, ""}, /*down arrow */
- X {SHIFTMASK, 0x45, 0, ""}, /* up arrow */
- X {SHIFTMASK, 0x5d, 0, ""}, /* right arrow */
- X {SHIFTMASK, 0x5b, 0, ""}, /*left arrow */
- X {SHIFTMASK, 0x71, 0, ""}, /*down arrow */
- X};
- X
- Xstatic void get_keys();
- Xstatic void fix_keys();
- Xstatic void reset_keys();
- Xstatic void do_key();
- Xstatic void check_baud();
- Xstatic void do_c_key();
- X
- X/* support an icon */
- Xstatic short icon_image[] = {
- X#include "dgtool.icon"
- X};
- X
- XDEFINE_ICON_FROM_IMAGE(dgtool_icon, icon_image);
- X
- Xstruct baud_tab {
- X char *baud_string;
- X int baud_rate;
- X} baud_tab[] = {
- X "50", B50,
- X "75", B75,
- X "110", B110,
- X "134", B134,
- X "150", B150,
- X "200", B200,
- X "300", B300,
- X "600", B600,
- X "1200", B1200,
- X "1800", B1800,
- X "2400", B2400,
- X "4800", B4800,
- X "9600", B9600,
- X "19200", EXTA,
- X NULL, 0
- X};
- X
- Xmain(argc, argv)
- Xint argc;
- Xchar **argv;
- X{
- X int test_fd;
- X
- X kb_fd = open("/dev/kbd", 2);
- X if (kb_fd < 0) {
- X fprintf(stderr, "dgtool: keyboard open failed\n");
- X exit(1);
- X }
- X
- X base_frame = window_create(0, FRAME,
- X WIN_ROWS, 25,
- X WIN_COLUMNS, 80,
- X FRAME_LABEL, "dgtool",
- X FRAME_ICON, &dgtool_icon,
- X FRAME_ARGC_PTR_ARGV, &argc, argv,
- X 0);
- X
- X if ((argc > 3) || (argc < 2)) {
- X fprintf(stderr, "dgtool /dev/tty?|host [baud] [window args]\n");
- X exit(1);
- X }
- X
- X if ( ((test_fd = open(argv[1], 2)) < 0 ) && (gethostbyname(argv[0]) != NULL) ) {
- X fprintf(stderr, "dgtool: can't open the line to the DG or find a host\n");
- X exit(1);
- X } else {
- X if (test_fd >= 0)
- X close(test_fd);
- X }
- X if (argc == 3) {
- X check_baud(argv[2]);
- X }
- X
- X argv[0] = DG;
- X
- X tty_win = window_create(base_frame, TTY, TTY_ARGV, argv, 0);
- X
- X window_set(tty_win, WIN_CONSUME_KBD_EVENTS,
- X WIN_ASCII_EVENTS,
- X WIN_RIGHT_KEYS,
- X WIN_TOP_KEYS,
- X 0,
- X 0);
- X window_set(tty_win, WIN_IGNORE_KBD_EVENT, WIN_UP_EVENTS, 0);
- X
- X notify_interpose_destroy_func(base_frame, my_destroy_interposer);
- X notify_interpose_event_func(tty_win, my_tty_interposer, NOTIFY_SAFE);
- X
- X window_main_loop(base_frame);
- X exit(0);
- X}
- X
- X
- X
- Xstatic void
- Xget_keys()
- X{
- X register int i;
- X
- X for( i = 0; i < NUM_KEYS_TO_SAVE; i++) {
- X if (ioctl(kb_fd, KIOCGETKEY, &save_keys[i]) < 0) {
- X fprintf(stderr, "dgtool: getkeys - kb ioctl failed\n");
- X exit(1);
- X }
- X }
- X}
- X
- Xstatic void
- Xreset_keys()
- X{
- X register int i;
- X
- X for( i = 0; i < NUM_KEYS_TO_SAVE; i++) {
- X if (ioctl(kb_fd, KIOCSETKEY, &save_keys[i]) < 0) {
- X fprintf(stderr, "dgtool: reset_keys - kb ioctl failed\n");
- X exit(1);
- X }
- X }
- X}
- X
- Xstatic void
- Xfix_keys()
- X{
- X struct kiockey tmp_key;
- X
- X tmp_key = save_keys[0]; /* up arrow */
- X tmp_key.kio_entry = 027;
- X if (ioctl(kb_fd, KIOCSETKEY, &tmp_key) < 0) {
- X fprintf(stderr, "dgtool: kb ioctl failed\n");
- X exit(1);
- X }
- X
- X tmp_key = save_keys[4]; /* shifted up arrow */
- X strcpy(tmp_key.kio_string, "\036\027");
- X if (ioctl(kb_fd, KIOCSETKEY, &tmp_key) < 0) {
- X fprintf(stderr, "dgtool: kb ioctl failed\n");
- X exit(1);
- X }
- X
- X tmp_key = save_keys[1]; /* right arrow */
- X tmp_key.kio_entry = 030;
- X if (ioctl(kb_fd, KIOCSETKEY, &tmp_key) < 0) {
- X fprintf(stderr, "dgtool: kb ioctl failed\n");
- X exit(1);
- X }
- X tmp_key = save_keys[5]; /* shifted right arrow */
- X strcpy(tmp_key.kio_string, "\036\030");
- X if (ioctl(kb_fd, KIOCSETKEY, &tmp_key) < 0) {
- X fprintf(stderr, "dgtool: kb ioctl failed\n");
- X exit(1);
- X }
- X
- X tmp_key = save_keys[2]; /* left arrow */
- X tmp_key.kio_entry = 031;
- X if (ioctl(kb_fd, KIOCSETKEY, &tmp_key) < 0) {
- X fprintf(stderr, "dgtool: kb ioctl failed\n");
- X exit(1);
- X }
- X tmp_key = save_keys[6]; /* shifted left arrow */
- X strcpy(tmp_key.kio_string, "\036\031");
- X if (ioctl(kb_fd, KIOCSETKEY, &tmp_key) < 0) {
- X fprintf(stderr, "dgtool: kb ioctl failed\n");
- X exit(1);
- X }
- X
- X tmp_key = save_keys[3]; /* down arrow */
- X tmp_key.kio_entry = 032;
- X if (ioctl(kb_fd, KIOCSETKEY, &tmp_key) < 0) {
- X fprintf(stderr, "dgtool: kb ioctl failed\n");
- X exit(1);
- X }
- X tmp_key = save_keys[7]; /* shifted down arrow */
- X strcpy(tmp_key.kio_string, "\036\032");
- X if (ioctl(kb_fd, KIOCSETKEY, &tmp_key) < 0) {
- X fprintf(stderr, "dgtool: kb ioctl failed\n");
- X exit(1);
- X }
- X
- X}
- X
- Xstatic Notify_value
- Xmy_destroy_interposer(frame, status)
- XFrame frame;
- XDestroy_status status;
- X{
- X if (status == DESTROY_CLEANUP) {
- X reset_keys();
- X }
- X return(notify_next_destroy_func(frame, status));
- X}
- X
- Xstatic Notify_value
- Xmy_tty_interposer(frame, event, arg, type)
- XFrame frame;
- XEvent *event;
- XNotify_arg arg;
- XNotify_event_type type;
- X{
- X register int input;
- X register int shift, ctrl;
- X char baby_buffer; /* for arrow keys */
- X Notify_value value;
- X
- X input = event_id(event);
- X
- X if (input == KBD_USE) {
- X get_keys();
- X fix_keys();
- X }
- X
- X if (input == KBD_DONE) {
- X reset_keys();
- X }
- X
- X if ((event_is_key_top(event)) || (event_is_key_right(event)) ) {
- X
- X if ( event_ctrl_is_down(event)) {
- X ctrl = 1;
- X } else {
- X ctrl = 0;
- X }
- X
- X if ( event_shift_is_down(event)) {
- X shift = 1;
- X } else {
- X shift = 0;
- X }
- X
- X switch(input) {
- X /*
- X * function keys
- X */
- X case KEY_RIGHT(6):
- X do_key(0160, shift, ctrl);
- X break;
- X case KEY_TOP(1):
- X do_key(0161, shift, ctrl);
- X break;
- X case KEY_TOP(2):
- X do_key(0162, shift, ctrl);
- X break;
- X case KEY_TOP(3):
- X do_key(0163, shift, ctrl);
- X break;
- X case KEY_TOP(4):
- X do_key(0164, shift, ctrl);
- X break;
- X case KEY_TOP(5):
- X do_key(0165, shift, ctrl);
- X break;
- X case KEY_TOP(6):
- X do_key(0166, shift, ctrl);
- X break;
- X case KEY_TOP(7):
- X do_key(0167, shift, ctrl);
- X break;
- X case KEY_TOP(8):
- X do_key(0170, shift, ctrl);
- X break;
- X case KEY_TOP(9):
- X do_key(0171, shift, ctrl);
- X break;
- X case KEY_RIGHT(1):
- X do_key(0172, shift, ctrl);
- X break;
- X case KEY_RIGHT(2):
- X do_key(0173, shift, ctrl);
- X break;
- X case KEY_RIGHT(3):
- X do_key(0174, shift, ctrl);
- X break;
- X case KEY_RIGHT(4):
- X do_key(0175, shift, ctrl);
- X break;
- X case KEY_RIGHT(5):
- X do_key(0176, shift, ctrl);
- X break;
- X /*
- X * home
- X */
- X case KEY_RIGHT(11):
- X baby_buffer = 010;
- X ttysw_input(tty_win, &baby_buffer, 1);
- X break;
- X /*
- X * "c" keys
- X */
- X case KEY_RIGHT(7):
- X do_c_key(0134, shift);
- X break;
- X case KEY_RIGHT(9):
- X do_c_key(0135, shift);
- X break;
- X case KEY_RIGHT(13):
- X do_c_key(0136, shift);
- X break;
- X case KEY_RIGHT(15):
- X do_c_key(0137, shift);
- X break;
- X default:
- X break;
- X }
- X return(NOTIFY_DONE);
- X }
- X value = notify_next_event_func(frame, event, arg, type);
- X return(value);
- X}
- X
- Xstatic void
- Xdo_key(code, shift, ctrl)
- Xint code, shift, ctrl;
- X{
- X register char out_code;
- X static char buffer[2] = "\036";
- X
- X
- X if (shift && ctrl) {
- X out_code = code - 0120;
- X } else if (shift) {
- X out_code = code - 020;
- X } else if (ctrl) {
- X out_code = code - 0100;
- X } else {
- X out_code = code;
- X }
- X buffer[1] = out_code;
- X ttysw_input(tty_win, buffer, 2);
- X}
- X
- Xstatic void
- Xcheck_baud(string)
- Xchar *string;
- X{
- X struct baud_tab *btp;
- X
- X btp = baud_tab;
- X
- X while(btp->baud_string != NULL) {
- X if (strcmp (string, btp->baud_string) == 0)
- X return;
- X btp++;
- X }
- X fprintf(stderr, "dgtool: unknown baud rate\n");
- X fprintf(stderr, "known baud rates are:\n");
- X
- X btp = baud_tab;
- X while(btp->baud_string != NULL) {
- X fprintf(stderr, "\t%s\n", btp->baud_string);
- X btp++;
- X }
- X exit(1);
- X}
- X
- Xstatic void
- Xdo_c_key(code, shift)
- Xint code, shift;
- X{
- X register char out_code;
- X static char buffer[2] = "\036";
- X
- X
- X if (shift) {
- X out_code = code - 04;
- X } else {
- X out_code = code;
- X }
- X buffer[1] = out_code;
- X ttysw_input(tty_win, buffer, 2);
- X}
- SHAR_EOF
- if test 9201 -ne "`wc -c 'dgtool.c'`"
- then
- echo shar: error transmitting "'dgtool.c'" '(should have been 9201 characters)'
- fi
- echo shar: extracting "'dgtool.icon'" '(2838 characters)'
- if test -f 'dgtool.icon'
- then
- echo shar: over-writing existing file "'dgtool.icon'"
- fi
- sed 's/^X//' << \SHAR_EOF > 'dgtool.icon'
- X/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
- X * @(#)dgtool.i 1.1 6/28/89 Copyright (c) 1989 by Southwest Research Institute, San Antonio, TX
- X *
- X * Copyright (c) 1989 Southwest Research Institute
- X * All rights reserved.
- X *
- X * Redistribution and use in source and binary forms are permitted
- X * provided that the above copyright notice and this paragraph are
- X * duplicated in all such forms and that any documentation,
- X * advertising materials, and other materials related to such
- X * distribution and use acknowledge that the software was developed
- X * by Southwest Research Institute. The name of Southwest Research
- X * Institute may not be used to endorse or promote products derived
- X * from this software without specific prior written permission.
- X * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- X * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- X * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- X */
- X 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
- X 0xC000,0x0000,0x0000,0x0003,0xC000,0x0039,0xCE00,0x0003,
- X 0xC00F,0x8039,0xCE02,0x2003,0xC892,0x404A,0x5251,0xC7C3,
- X 0xD740,0x004A,0x5220,0x8923,0xC200,0x01CE,0x7380,0x0003,
- X 0xC030,0x0F4A,0x50F0,0x0003,0xC000,0xF54A,0x50AF,0x0413,
- X 0xC003,0x5B4A,0x50DA,0xC3E3,0xD405,0xB57A,0x4CAD,0xA083,
- X 0xC81B,0x554A,0x42AA,0xD803,0xC035,0x5B4A,0x42DA,0xAC2B,
- X 0xC055,0xB54A,0x42AD,0xAA13,0xC05B,0x554A,0x52AA,0xDA03,
- X 0xC0B5,0x5BCE,0x73DA,0xAD03,0xC1D5,0xBF4A,0x52FD,0xAB83,
- X 0xC35B,0xF06B,0x9C0F,0xDAC3,0xC1FF,0x006B,0x9C00,0xFF83,
- X 0xC049,0x0000,0x0024,0x8A03,0xC063,0x0000,0x0018,0xA203,
- X 0xD145,0x1111,0x0000,0xC68B,0xD151,0x1111,0x0000,0x928B,
- X 0xFBC9,0x3BBB,0x0880,0x8BDF,0xD163,0x1111,0x0500,0xA28B,
- X 0xFFFF,0xFFFF,0x0201,0xC7FF,0xD541,0xD555,0x0201,0x92AB,
- X 0xD545,0xD555,0x0001,0x8AAB,0xFBC5,0xBBBB,0x0001,0xA3DF,
- X 0xD545,0xD555,0x0001,0xC6AB,0xD545,0xD555,0x0221,0x92AB,
- X 0xFBC5,0xBBBB,0x05D1,0x8BDF,0xD545,0x5555,0x0080,0xFEAB,
- X 0xD545,0x5555,0x0000,0x82AB,0xFBCD,0xBBBB,0x0001,0x9BDF,
- X 0xD555,0x5555,0x0000,0xAAAB,0xD555,0x5555,0x0000,0xAAAB,
- X 0xFBD5,0xBBBB,0x0001,0xABDF,0xD555,0x5555,0x0000,0xAAAB,
- X 0xD555,0x555F,0x0000,0xAAAB,0xFBD5,0xBBBB,0x0001,0xABDF,
- X 0xD555,0x555F,0x0000,0xAAAB,0xD54D,0x5555,0x0000,0x9AAB,
- X 0xFBC1,0xBBBB,0x0001,0x8BDF,0xD57F,0x5555,0x0800,0xAAAB,
- X 0xD545,0x5555,0x1010,0xAAAB,0xFBD1,0xBBBB,0x1019,0xABDF,
- X 0xD549,0x5555,0x133C,0xAAAB,0xD563,0x5555,0x17F8,0xAAAB,
- X 0xFBC5,0xBBBB,0x17F1,0x93DF,0xD551,0x5555,0x0FFC,0x82AB,
- X 0xD549,0x5555,0x0EF2,0xFEAB,0xFBE3,0xBBBB,0x0E61,0xA3DF,
- X 0xD545,0xD555,0x0C61,0xC6AB,0xD551,0xD555,0x0821,0x92AB,
- X 0xFBC9,0xBBBB,0x0821,0x8BDF,0xD563,0xD555,0x0411,0xA2AB,
- X 0xD545,0xD555,0x0001,0xC6AB,0xFFD1,0xFFFF,0x0001,0x93FF,
- X 0xC07F,0x0000,0x0000,0xFE03,0xC000,0x0000,0x0000,0x0003,
- X 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF
- SHAR_EOF
- if test 2838 -ne "`wc -c 'dgtool.icon'`"
- then
- echo shar: error transmitting "'dgtool.icon'" '(should have been 2838 characters)'
- fi
- # End of shell archive
- exit 0
-